#include "head.h"
// 选项
const wchar_t *title = L"普通用户菜单";
const wchar_t *option_1[] = {L"登陆", L"注册", L"返回"};

const wchar_t * title_ticket = L"买票退票菜单";
const wchar_t * option_ticket[] = {
        L"买票",
        L"退票",
    };

const wchar_t * title_root = L"用户菜单";
const wchar_t * option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"增加超级用户"
};
const wchar_t * title_user = L"用户菜单";

const wchar_t * option_user[] = {
    L"购票退票",
    L"余额充值",
    L"查看航班",
    L"修改密码",
    L"我的订单"
};


// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.ADMIN_USER     = init_link_list();         //  管理员账户信息文件
    Flight_sys.REGULAR_USER   = init_link_list();         //  普通用户信息文件
    Flight_sys.SILVER_USER    = init_link_list();         //  银卡会员信息文件(9折)
    Flight_sys.GOLD_USER      = init_link_list();         //  金卡会员信息文件(8折)
    Flight_sys.PLATINUM_USER  = init_link_list();         //  白金会员信息文件(7折)
    Flight_sys.list_f_1 = init_double_link_list();        //  航班信息

    // 从文件中导入数据
    F_f_scanf(Flight_sys.list_f_1);
    F_u_scanf( Flight_sys.ADMIN_USER    , ADMIN_FILE     ); //  管理员账户信息文件
    F_u_scanf( Flight_sys.REGULAR_USER  , REGULAR_FILE   ); //  普通用户信息文件
    F_u_scanf( Flight_sys.SILVER_USER  , SILVER_FILE    ); //  银卡会员信息文件(9折)
    F_u_scanf( Flight_sys.GOLD_USER    , GOLD_FILE      ); //  金卡会员信息文件(8折)
    F_u_scanf( Flight_sys.PLATINUM_USER , PLATINUM_FILE  ); //  白金会员信息文件(7折)

    system("clear");
    return Flight_sys;
}

// 系统登录
user_t Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
    u_list * list = init_link_list();
    list = merge_link_lists( list , Flight_sys.ADMIN_USER    );        //  管理员账户信息文件
    list = merge_link_lists( list , Flight_sys.REGULAR_USER  );        //  普通用户信息文件
    list = merge_link_lists( list , Flight_sys.SILVER_USER   );        //  银卡会员信息文件(9折)
    list = merge_link_lists( list , Flight_sys.GOLD_USER     );        //  金卡会员信息文件(8折)
    list = merge_link_lists( list , Flight_sys.PLATINUM_USER );        //  白金会员信息文件(7折)
    print_link_list(Flight_sys.ADMIN_USER );
    F_u_print(Flight_sys.ADMIN_USER,ADMIN_FILE);
    // 开始登录

    user_t log_data = log_in(list);
    return log_data;
}

// 系统菜单
void Sys_menu(f_list *Flight_list, user_t log_data , FlightSystem Flight_sys)
{   
    // 用户信息合表
    u_list * list = init_link_list();
    list = merge_link_lists( list , Flight_sys.ADMIN_USER    );        //  管理员账户信息文件
    list = merge_link_lists( list , Flight_sys.REGULAR_USER  );        //  普通用户信息文件
    list = merge_link_lists( list , Flight_sys.SILVER_USER   );        //  银卡会员信息文件(9折)
    list = merge_link_lists( list , Flight_sys.GOLD_USER     );        //  金卡会员信息文件(8折)
    list = merge_link_lists( list , Flight_sys.PLATINUM_USER );        //  白金会员信息文件(7折)
    
    u_list * list1 = init_link_list();
    if (log_data.grade == 2)
    {
        list1 = Flight_sys.GOLD_USER;

    }
    else if (log_data.grade == 3)
    {
        list1 = Flight_sys.PLATINUM_USER;

    }
    else if (log_data.grade == 4)
    {
        list1 = Flight_sys.REGULAR_USER;

    }
    else if (log_data.grade == 5)
    {
        list1 = Flight_sys.SILVER_USER;

    }

    int flag = 0;
    printf("%d\n" , log_data.grade);
    
    switch (log_data.grade)
    {
    case 1:
        // 管理员功能界面
        printf("欢迎管理员用户登陆\n");
        getchar();
        flag = display_menu(title_root, option_root, 4);
        break;
    default:
        // 普通用户功能界面
        printf("欢迎普通用户登陆\n");
        flag = display_menu(title_user, option_user, 5) + 4;
        break;
    }

    // 菜单选项分支处理
    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        add_flight(Flight_sys.list_f_1);
        break;
    case 2:
        // 管理员 - 修改航班
        set_flight(Flight_sys.list_f_1);
        break;
    case 3:
        // 管理员 - 修改普通用户
        set_user(list,Flight_sys.REGULAR_USER, Flight_sys.SILVER_USER, Flight_sys.GOLD_USER, Flight_sys.PLATINUM_USER);
        break;
    case 4:
        // 管理员 - 增加超级用户
        add_root(Flight_sys.ADMIN_USER);
        break;
    case 5:
        // 用户 - 购票退票
        flag = display_menu(title_ticket, option_ticket, 2);
        switch (flag)
        {
            case 1:
                buy_ticket(Flight_sys.list_f_1 , log_data , list1);
                break;
            case 2:
                refund(Flight_sys.list_f_1 , log_data , list1);
                break;
            default:
                break;
        }
        
        break;
    case 6:
        // 用户 - 余额充值
        Recharge_balance(log_data , list1);
        break;
    case 7:
        // 用户 - 查看航班
        print_forward_double_link_list(Flight_sys.list_f_1);
        break;
    case 8:
        // 用户 - 修改密码
        c_passwd(log_data , list1);
        break;
    case 9:
        // 用户 - 我的订单
        check(Flight_sys.list_f_1 , log_data);
        break;
    default:
        break;
    }
    return ;
}
